
package co.edu.uniquindio.pruebas;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.embeddable.EJBContainer;
import javax.naming.NamingException;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import co.edu.uniquindio.dao.MotorDao;
import co.edu.uniquindio.logica.Motor;


/**
 * 
 * Prueba implementation class for: PruebaMotor
 * El proposito de esta clase es el probar  la
 * DAO relacionada con la informacion de un motor.
 * @author Andres Felipe Abril 
 * @author Luis Enrique Robledo
 *
 */
public class PruebaMotor {

	/**
	 * contenedor en el cual se manejara la instancia del EJB que 
	 * maneja los datos que se utilizaran para la prueba
	 */
	private EJBContainer contenedor;
	/**
	 * este atributo es un instancia de la clase MotorDao
	 */
	private MotorDao motorDao;
	/**
	 * metodo de la clase PruebaMotor el cual 
	 * configura las condiciones iniciales para hacer la prueba.
	 */
    @Before
	public void configurar()
	{
		Map<String,String> properties = new HashMap<String,String>();
		properties.put(EJBContainer.APP_NAME, "Subasta");
		System.out.println(EJBContainer.APP_NAME);
	     contenedor = EJBContainer.createEJBContainer(properties);
	}
    /**
	 * este metodo es para regresar a todas las condiciones iniciales
	 * antes de la prueba a excepcion de lo incertado en la BD que se hace
	 * al cerrar el contenedor en el cual se encapsula la instancia del EJB
	 * 
	 */
	@After
	public void terminar()
	{
		contenedor.close();
	}
	/**
	 * Metodo en el cual se hacen diversas incersiones en la BD atravez de
	 * de la DAO pertinente relacionada al motor para despues verificar
	 * los datos obtenidos atravez de la misma DAO. 
	 * @throws NamingException
	 */
    @Test
    public void testCrudMotor() throws NamingException 
    {
    	
    	motorDao=(MotorDao)contenedor.getContext().lookup("java:global/Subasta/MotorDao");
    	Motor motor=new Motor(12345,4, 8);
    	
    	//prueba de insercion
    	motorDao.insert(motor);
    	Assert.assertEquals(12345, motor.getReferencia());
    	
    	//Prueba de búsqueda
    	Motor motorRecuperado=motorDao.findByKey(motor.getReferencia());
    	Assert.assertEquals(motorRecuperado.getReferencia() , motor.getReferencia());
    	
    	
    	//Prueba actualización
    	
    	motorRecuperado.setPotencia(6);
    	motorRecuperado.setCilindraje(9);
    	motorRecuperado.setReferencia(1456);
        motorDao.update(motorRecuperado);
        motor=motorDao.findByKey(motorRecuperado.getReferencia());
        Assert.assertEquals(1456,motor.getReferencia());

      //Prueba getAll
        Motor otroMotor= new Motor();
        otroMotor.setCilindraje(6);
        otroMotor.setPotencia(4);
        otroMotor.setReferencia(2468);
        motorDao.insert(otroMotor);
        List<Motor>motores=motorDao.getAll();
        Assert.assertTrue(motores.contains(otroMotor));
        Assert.assertTrue(motores.contains(motor));    	
        
      // //Prueba delete
        motorDao.remove(motor);
        motorDao.remove(otroMotor);
        motores=motorDao.getAll();
        Assert.assertTrue(!motores.contains(otroMotor));
        Assert.assertTrue(!motores.contains(motor));    	
    	
        
        
    	  
        
        
    	
    	
    }
    
    	
	
}
